iT邦幫忙

2023 iThome 鐵人賽

DAY 2
1

版控:GitHub

因為這是一個專案,所以我會希望會有版本控制,通常在做專案不會只有自己一個人做,所以如果今天會其他人加入的話,就會需要用到這個,或是你想給別人看你的專案的時候也會用到,總之,我認為學會Git是一項蠻重要的技能,現在我們開始來安裝Git吧~
首先我們先到Git官網下,這裡提供了很多安裝方法:
https://git-scm.com/download/mac
我是透過brew安裝的:

brew install git

https://ithelp.ithome.com.tw/upload/images/20230917/20140368abeNdZn0zK.png
檢查是否安裝成功:

git --version

https://ithelp.ithome.com.tw/upload/images/20230917/20140368KQWW6xk1Z0.png
我們需要先在 Git 平台上建立一個帳戶,網址如下,

https://github.com/

建立完帳戶之後,我們就可以在 Terminal 打上,

 git config --global user.name "使用者名稱"
 git config --global user.email "使用者信箱" 

來設置你基礎的 git 設定,

那設置完之後,要怎麼知道有沒有錯呢,這時候只需要打上,

git config --list

https://ithelp.ithome.com.tw/upload/images/20230917/20140368QHHvaCh4a6.png
然後照著下面輸入:

$ ssh-keygen -t ed25519 -C "<your_email@example.com>"

如果上面不行就改用這個:

 ssh-keygen -t rsa -b 4096 -C "<your_email@example.com>"

然後他會問你Key要放的位置,沒有要改就直接Enter 然後一直Enter。

接著輸入

vim ~/.ssh/id_rsa.pub

就可以看到SSH Key的位置了,接著全部複製,貼到 GitHub 頭像 -> Settings -> SSH and GPG keys -> New SSH key -> Key 裡面。

把GitHub生好的SSH Key 記好

然後去註冊一個GitHub,註冊好之後建立一個Repository
https://ithelp.ithome.com.tw/upload/images/20230917/20140368gHTy2eZm9s.png

  • 記得把 Add a README file打勾

好了之後我們把他用git指令複製一份副本到桌面
終端機先cd到你要把檔案放置的地方,我的話是放在桌面:

cd desktop

https://ithelp.ithome.com.tw/upload/images/20230917/2014036803C4t4JEpl.png然後去到 Repository 這裡把他複製起來:
https://ithelp.ithome.com.tw/upload/images/20230917/20140368FPZ7tywcVn.png
接著下:

git glone 你複製的東西

例如我的就是

git clone https://github.com/fox3allenwang/FoodDemo.git

看到他有寫完成代表就有了!
https://ithelp.ithome.com.tw/upload/images/20230917/20140368uf9yiMHUEH.png### XCode & Swift
接著我們去官網下載XCode
https://developer.apple.com/download/all/
目前我所使用的版本是:XCode 14.3.1
https://ithelp.ithome.com.tw/upload/images/20230917/20140368JpoE3r6KsH.png直接下載這個就可以了,下載好之後我們先介紹一點基本的Swift語法:
基本的運算我就不介紹了,介紹一些我自己常在用的語法吧!

  1. Protocol
@objc protocol CustomViewListener:NSObjectProtocol{
    @objc optional func target(tag:String)
    
}

因為有時候我們會需要調用到像是TableView Cell 或者是 CollectionView Cell 的 indexPath.row的值,但是他只能在他自己本身的ViewController 去呼叫,所以這會有點麻煩,像是之前我有做過一的Demo,是他點了當前的Cell會要作暫存值還有變色的功能,就會需要用到這種Protocal的方法。

  1. Delegate
    這個我通常都會搭配Protocal來做使用,可以參考下面的圖:
    https://ithelp.ithome.com.tw/upload/images/20230917/20140368AX2L1Obu7W.png(圖片來源:https://franksios.medium.com/ios-protocol-and-delegate-2019852d4f14)
    也就是我在CollectionView Cell寫一個變數叫做delegate,然後在我要的ViewController把元件的delegate給過去,那麼他就會依照我寫的protocal裡面的func去執行他要做的事情。
    譬如我在Cell這頁寫一個delegate:
var delegate: CustomViewListener?

然後我可能要按下按鈕會變顏色,所以我會有一個IBAction:

@IBAction func didTapBtn(_ sender: Any) {
    delegate?.target?(tag: stringTag)
}

然後我在我Cell的ViewController裏面去呼叫:

MainViewControllerCustomView.delegate = self
MainViewControllerCustomView.setInit(tag: "MainCustomView", text: "123", image: UIImage(systemName: "pencil")!)

之後我寫一個擴展,當然你可以直接繼承在你那頁的ViewController裡面也可以:

extension MainVC:CustomViewListener{   
    func target(tag: String) {
        switch tag {
            case "你的String名稱"
            //你想要的功能
        }
    }
  1. await/async、MainActor、Task
    這是Swift5.5的新語法,用來取代之前的DispatchQueue.main.async
    await一定要搭配async去做使用,使用之前他必須在你的func前面加上 @MainActor,Task是可以讓你在一個地方執行你要的功能,類似於你創造一個空間的概念。

await/async 的範例:

@MainActor func 打API() async {
    let data = await 發送指令()
    處理資料(data)
}

所以代表我的 let data = await那邊可能會被暫停,具體多久時間我沒辦法知道。

Task的範例:

print("Start")
Task {
    await 發送指令
}
print("End")

這邊從Start到End中間會建立一個獨立的空間,但程式不會等到發送指令完成後才會去執行print("End"),會直接做到底。

  1. enum/switch
enum Vehicle {
    case Car
    case Ship
    case Bicycle
}

var myVehicle= Vehicle.Car

switch Vehicle {
case .Car: //你要做的事
case .Ship: //你要做的事
case .Bicycle: //你要做的事     
default: break                  
}
  1. Typealias
typealias EventType = (eventID: EventID, eventValue: Int, eventValueDetail: String)
enum MealEventValue: Int, CaseIterable {
    case Breakfast = 0, Lunch, Dinner, Snack, Drink
    var value: EventType {
        switch self {
        case .Breakfast:
            return (.Meal, 0, NSLocalizedString("Breakfast", comment: ""))
        case .Lunch:
            return (.Meal, 1, NSLocalizedString("Lunch", comment: ""))
        case .Dinner:
            return (.Meal, 2, NSLocalizedString("Dinner", comment: ""))
        case .Snack:
            return (.Meal, 3, NSLocalizedString("Snack", comment: ""))
        case .Drink:
            return (.Meal, 4, NSLocalizedString("Drinks", comment: ""))
        }
    }
}

以上大概這些。
接著我們學習怎麼把專案Push上去到我們的GitHub吧!

  1. 先cd到檔案路徑:

  2. git status 這是讓我們看一下當前的狀態,可以看到終端機顯示一個“未追蹤的的檔案:”然後出現一段紅紅的,這樣就是我這個檔案還沒更新到GitHub
    https://ithelp.ithome.com.tw/upload/images/20230917/201403680c5IsU1X4f.png

  3. git add .
    https://ithelp.ithome.com.tw/upload/images/20230917/20140368265RBFaEXQ.png

  4. git commit -m "你做了什麼更動".
    https://ithelp.ithome.com.tw/upload/images/20230917/20140368qqvJle6yVb.png
    因為現在他不支援密碼push改用token的方式,所以我們進到Setting -> Developer settings -> Personal access token (classic) ,我是把他設成永不過期,然後我只用到Repo的功能所以就只打勾Repo,好了之後他會給你一組Token,把那個記好,之後push輸入的密碼都會是那組token!
    https://ithelp.ithome.com.tw/upload/images/20230917/20140368gs6aCZiKdy.png

  5. git push
    https://ithelp.ithome.com.tw/upload/images/20230917/20140368Bc01YVeu03.png

  6. 結果:
    https://ithelp.ithome.com.tw/upload/images/20230917/20140368h3n5zNHCE3.png
    以上就是今天的內容了!


上一篇
Day1: 開場
下一篇
Day 3 專案架構介紹
系列文
App從開發到上架30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言